//单链表逆置

class Node{
    constructor(value,next=null){
        this.value = value;
        this.next = next;
    }
}

let a = new Node(1);
let b = new Node(2);
let c = new Node(3);
let d = new Node(4);
let e = new Node(5);

a.next = b;
b.next = c;
c.next = d;
d.next = e;

//先搞一个单链表

//单链表逆置函数
function reverseList(head) {
    let prev = null;   // 新头
    let cur = head;    // 当前正在处理的节点,从头节点开始处理
    while (cur) {
      const next = cur.next; // 1. 先存后继,将当前处理的节点的下一个节点存起来
      cur.next = prev;       // 2. 指针掉头,将当前节点的next指向prev
      prev = cur;            // 3. 两个指针前进一步,将prev指向当前节点,这个prev最终的节点将作为新链表的头节点
      cur = next;            // 4. 将cur指向下一个节点
    }
    return prev; // prev 最后停在原尾节点，即新头
  }

  console.log('原始链表:')
  console.log(a)
  console.log('逆置后的链表:')
  console.log(reverseList(a))